#ifndef FUNCIONESUTILES_H_
#define FUNCIONESUTILES_H_

#include <string.h>
#include <string>
#include <sstream>
#include <iostream>
#include <cstdlib>
#include <stdio.h>

#include "Constantes.h"
#include "Bytes.h"

class BloqueArbol;

using namespace std;

/*
 * Clase utilitaria de funciones utiles.
 */
cantBytes bytesToCantBytes(const Bytes& bytes);
Bytes crearByteNulo();
Bytes crearBytesNulos(cantBytes cantidad);
string convertirBytesOffsetAString(const offset &off);
string intToString(const int entero);
bool stringToBool(const string &string);
string boolToString(const bool booleano);
string toUpperCase(const string &dato);
string quitarLetra(char letra,const string &dato);
offset obtenerOffsetPorBits(string s,cantBytes cantidadBits);
void bitsSeteados(const unsigned char byte, int *vector);
void bitsSeteados(offset dato, int *vector);
unsigned int pow(unsigned int base,unsigned int exponente);
string deOffsetAStringBinario(offset dato,cantBytes cantBits = 32);


/*Funciones auxiliares del arbol*/
void BalancearDos(BloqueArbol* nodo, BloqueArbol* hermano, bool dosAUno);
void BalancearTres(BloqueArbol* hermanoIzq, BloqueArbol* nodo,
		BloqueArbol* hermano, bool tresADos);


#endif /* FUNCIONESUTILES_H_ */
